//nuxt 声明状态 必须是function
const state = () => ({
    accessToken: null, // 访问令牌在cookie的key值
    refreshToken: null, // 刷新令牌在cookie的key值
    userInfo: null
})

const mutations = {
// 重置用户状态
  RESET_USER_STATE(state) {
    // 状态置空
    state.userInfo = null
    state.accessToken = null
    state.refreshToken = null
    console.log('设置state为null完毕')
  },
  // 更新用户状态
  UPDATEE_USER_STATE(state, data) {
    // 状态赋值
    state.userInfo = data.userInfo
    state.accessToken = data.accessToken
    state.refreshToken = data.refreshToken

    // console.log("userInfo=" + this.state.userInfo)
    // console.log("refreshToken="+this.state.refreshToken)
    // console.log("accessToken="+this.state.accessToken)
    // console.log('UPDATEE_USER_STATE 结束')
  }
}

const actions = {
  //nuxt 提供的每次发送请求钱都调用此方法 并且该方法的第二个参数是context,第一个参数是store
  nuxtServerInit({commit}, {app}) {
    // console.log('nuxtServerInit', app.$cookies)
    const data = {}
    data.userInfo = app.$cookies.get('userInfo')
    data.accessToken = app.$cookies.get('accessToken')
    data.refreshToken = app.$cookies.get('refreshToken')
    //console.log('data', data)
    // 更新状态值
    commit('UPDATEE_USER_STATE', data)

  },
  loginPage({commit}) {
    console.log('进入到loginPage')
    //重置用户状态
    commit('RESET_USER_STATE')
    //跳转到认证客户端 redirectURL作为请求参数
    //window 是属于浏览器的对象 所以在触发这个action只能在客户端中进行触发
    //所以不能再服务端的方法里面去触发
    const loginPageRedirectStr = window.location.href
    console.log('loginPageRedirectStr=',loginPageRedirectStr)
    window.location.href = `${process.env.authURL}?redirectURL=${window.location.href}`
  },
  logout({commit}){
    //重置状态
    commit('RESET_USER_STATE')
    //跳转认证客户端实现退出
    window.location.href = `${process.env.authURL}/logout?redirectURL=${window.location.href}`

  }
}

export default {
  state,
  actions,
  mutations

}

